package halberd.filter;

import halberd.DataType;
import halberd.ImgFilter;
import halberd.data.ImgData;
import halberd.data.ImgDataFactory;

public class ShiftFilter implements ImgFilter {
	boolean shiftRight=false;
	public ShiftFilter(boolean shiftRight) {
		this.shiftRight=shiftRight;
	}
	public ImgData process(ImgData input) {
		if(!canProcess(input)) {
			return null;
		}
		ImgData result=ImgDataFactory.createImgData(input.getWidth(), input.getHeight());
		int[][][] ints=input.getDatas();
		shift(ints,result.getDatas(),input.getWidth(),input.getHeight());
		result.setDataType(DataType.RGB);
		return result;
	}
	private boolean canProcess(ImgData input) {
		if(input==null) {
			return false;
		}
		DataType dt=input.getDataType();
		if(dt==DataType.RGB) {
			return true;
		}
		if(dt==DataType.RGBA) {
			return true;
		}
		return false;
	}
	private void shift(int[][][] src,int[][][] dst,int w,int h) {
		if(shiftRight) {
			for(int i=0;i<w;++i) {
				for(int j=0;j<h;++j) {
					dst[i][j][0] = src[i][j][2];
					dst[i][j][1] = src[i][j][0];
					dst[i][j][2] = src[i][j][1];
					dst[i][j][4]=src[i][j][4];
				}
			}
		}else {
			for(int i=0;i<w;++i) {
				for(int j=0;j<h;++j) {
					dst[i][j][0] = src[i][j][1];
					dst[i][j][1] = src[i][j][2];
					dst[i][j][2] = src[i][j][0];
					dst[i][j][4]=src[i][j][4];
				}
			}
		}
		
	}
}
